package com.example.utils;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class TimeTransfer {
    private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN);

    // 将用户本地时间转换为UTC时间
    public static String convertToUtc(String localDateTimeString, ZoneId userTimeZoneId) {
        // 解析用户输入的本地时间
        LocalDateTime localDateTime = LocalDateTime.parse(localDateTimeString, formatter);
        // 转换为ZonedDateTime以包含时区信息
        ZonedDateTime zonedDateTime = localDateTime.atZone(userTimeZoneId);
        // 转换为UTC时间的Instant
        Instant utcInstant = zonedDateTime.toInstant();
        // 将UTC时间的Instant转换回LocalDateTime（注意：这会丢失时区信息，但格式正确）
        LocalDateTime utcLocalDateTime = utcInstant.atZone(ZoneId.of("UTC")).toLocalDateTime();
        // 格式化并返回UTC时间的字符串
        return utcLocalDateTime.format(formatter);
    }

    // 将UTC时间转换为用户本地时间
    public static String convertToLocalTimeZone(String utcDateTimeString, ZoneId userTimeZoneId) {
        // 解析UTC时间的字符串
        LocalDateTime utcLocalDateTime = LocalDateTime.parse(utcDateTimeString, formatter);
        // 将LocalDateTime转换为ZonedDateTime，但使用UTC时区
        ZonedDateTime utcZonedDateTime = utcLocalDateTime.atZone(ZoneId.of("UTC"));
        // 转换为用户时区的ZonedDateTime
        ZonedDateTime userZonedDateTime = utcZonedDateTime.withZoneSameInstant(userTimeZoneId);
        // 格式化并返回用户本地时间的字符串
        return userZonedDateTime.format(formatter);
    }
}
